Relational database management systems (RDBMSs) provide applications with access to stored database tables. Applications typically include, or reference, SQL statement text in requests sent from the application to the database system. Usually, a database system generates and maintains internal representations reflecting requests made to it by applications. These internal representations include both representations of SQL statements and SQL context information. The former are representations maintained by the database system corresponding to SQL statements referenced by requests to the database system. The latter are internal representations of the application contexts from which requests are made to the database system and contain information from those contexts such as the type of SQL statement and application cursor name. The efficiency of database access is dependent in part on the RDBMS architecture selected for the storage of, and access to, such executable statement representations and SQL context information.
One approach in database system design is to collect SQL statement and context information from an application by the introduction of a pre-processing stage in the compilation of the application source code to extract this type of information. A binding stage follows in which this SQL information is transferred into the RDBMS for future reference during the application's execution. During these steps, SQL text in an application is replaced with calls to RDBMS-supplied client routines. These routines are invoked at runtime and issue requests to the RDBMS. During the pre-processing and bind stages, SQL information is defined in the database system that is intended to reflect the application context from which application requests to the database will be issued. This information potentially includes SQL statement representations and SQL context information.
In some database management systems, SQL statements may call user-defined routines such as stored procedures and functions which may, in turn, include SQL statements. Such routines may call other routines or may make recursive calls. In such systems, during the execution of SQL statements, the statements may themselves invoke other SQL statements. If the same SQL routine is recursively invoked by an SQL statement, there may appear to be multiple SQL requests, each associated with the same request context, and each active at the same time within the application.
Such multiple requests may be handled by the RDBMS creating new SQL context data for each new request. However, the requests each share an association with the original SQL context data of the original application request. Because the requests from the user-defined routines are being executed under the scope of the original application request, the generation and management of multiple sets of SQL context data is a potential inefficiency in the RDBMS.